package cn.edu.lcu.cs.designpattern.state.trafficlight.state;

/**
 * 交通灯模拟类，持有状态对象，相当于策略模式中的环境类Context
 */
public class TrafficLight {
    private TrafficState state;

    public TrafficLight() {
        // 设置初始状态
        state = new RedState(this);
    }

    /**
     * 启动交通灯，无限循环更新状态。
     */
    public void start() {
        while (true) {
            // 休眠一秒钟
            try {
                Thread.sleep(200); // 为了快速演示，休眠200毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 休眠一秒之后改变自身状态
            change();
        }
    }

    /**
     * 改变状态
     */
    public void change() {
        // 状态改变的策略由状态本身的方法负责
        state.change();
    }

    public void setState(TrafficState state) {
        this.state = state;
    }
}
